package com.xmhmyh.generalframework.project.sys.service;

import com.xmhmyh.generalframework.common.BaseIService;
import com.xmhmyh.generalframework.project.sys.dto.MenuDTO;
import com.xmhmyh.generalframework.project.sys.entity.Menu;
import com.xmhmyh.generalframework.project.sys.entity.TreeNode;
import com.xmhmyh.generalframework.project.sys.entity.User;
import com.xmhmyh.generalframework.project.sys.enums.MenuType;
import com.xmhmyh.generalframework.project.sys.vo.MenuBtnVO;
import com.xmhmyh.generalframework.project.sys.vo.MenuVO;
import com.xmhmyh.generalframework.project.sys.vo.RouterVo;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @Author: 于丁
 * @DateTime: 2020/7/24 9:09 上午
 */
public interface IMenuService extends BaseIService<Menu> {

    /**
     * @return
     * @Author: 于丁
     * @Description: 根据UserId构造菜单树
     * @DateTime: 2020/7/24 9:23 上午
     * @Params:
     * @Return
     */
    List<Menu> genMenuThreeByUserId(Long userId, MenuType maxMenuType);


    /**
     * @Author: 于丁
     * @Description: 根据角色ids查找menu
     * @DateTime: 2020/7/30 10:13 上午
     * @Params:
     * @Return
     */
    List<Menu> getMenuByRoleIds(List<Long> ids);

    /**
     * @return
     * @Author: 于丁
     * @Description: 根据UserId获取用户的权限
     * @DateTime: 2020/7/21 2:12 下午
     * @Params:
     * @Return
     */
    List<Menu> getMenuByUserId(Long userId);


    /**
     * @Author: 于丁
     * @Description: 获取菜单列表信息
     * @DateTime: 2020/7/29 11:44 上午
     * @Params:
     * @Return
     */
    List<MenuVO> getMenuListDataUser(Long id);
    /**
     * @Author: 于丁
     * @Description: 构造角色的菜单树
     * @DateTime: 2020/7/30 10:31 上午
     * @Params:
     * @Return
     */
    Collection<TreeNode> buildMenuTree(Collection<Menu> menus);
    /**
     * @Author: 于丁
     * @Description: 保存菜单列表信息
     * @DateTime: 2020/7/29 11:44 上午
     * @Params:
     * @Return
     */
    void saveMenuHandler(User user, MenuDTO menuDTO);

    /**
     * @Author: 于丁
     * @Description: 删除菜单信息
     * @DateTime: 2020/7/29 3:49 下午
     * @Params:
     * @Return
     */
    void delHandler(Long id);

    /**
     * @Author: 于丁
     * @Description: 查找菜单下面的按钮
     * @DateTime: 2020/7/29 7:42 下午
     * @Params:
     * @Return
     */
    List<MenuBtnVO> getMenuBtnHandler(Map<Long,String> menuIdsMap, Long menuId);

    List<TreeNode> buildMenuTree(Collection<Menu> menus, Boolean isShowBtn);
}
